En este primer apéndice se hará un repaso por las herramientas que han hecho
posible el desarrollo de oFlute, indicando qué tareas se han llevado a cabo con
cada una de ellas.

Dado que en la actualidad, la tendencia es la de mover la potencia de cálculo a
la \textit{nube}, también se mencionarán las herramientas \textit{online} que
han aportado al proyecto.

\section{Lenguajes y bibliotecas de programación}

\subsection{C++}
El lenguaje elegido para elaborar el proyecto fue \textbf{C++}. C++ es un
lenguaje de programación que extendió el lenguaje original C hacia el paradigma
de la orientación a objetos, mediante el uso de clases, y el paradigma de la
programación genérica, mediante plantillas, además de incluir muchas otras
novedades y facilidades.

Se decidió utilizar C++ por la familiaridad que teníamos con el mismo, así como
por la velocidad y optimización que se obtienen en comparación con otros
lenguajes, como Java.

\subsection{Gosu}
\textbf{Gosu}~\cite{gosu} es una biblioteca libre para el desarrollo de
videojuegos 2D para Ruby y C++. Entre sus características más atractivas se
encuentran la aceleración gráfica por hardware, la sencillez de su API,
completamente orientada a objetos, y su compatibilidad con sistemas GNU/Linux,
Windows y Mac OS.

Esta biblioteca, que está cerca de lanzar su versión 0.8, cuenta con una base de
usuarios cada vez mayor, en parte gracias a su relativa popularidad entre los
desarrolladores indie y en los eventos de programación rápida de videojuegos.

\subsection{PulseAudio}
\textbf{PulseAudio}~\cite{pulseaudio} (mencionado previamente en la sección
\ref{sec:pulseaudio1}) es un servidor de sonido multiplataforma, muy popular en
distribuciones GNU/Linux actuales. Se decidió su uso por lo intuitiva y sencilla
de utilizar que resultaba su API, así como su estabilidad, en comparaciones con
otras opciones previamente probadas.

\subsection{GNU Gettext}

\textbf{GNU Gettext}~\cite{refgettext} es un conjunto de herramientas de internacionalización de
proyectos muy sencilla y popular. Se utilizó porque es la solución más eficaz y
aceptada a la hora de traducir un proyecto. Se puede encontrar un manual
introductorio en el apéndice \textit{\nameref{chap:tutorial_gettext}}.

\subsection{KissFFT}
\textbf{KissFFT}~\cite{kissfft} es una biblioteca que implementa el algoritmo
FFT para el cálculo de transformadas rápidas de Fourier. Es una biblioteca
pequeña, razonablemente eficiente y portable, con capacidad para realizar
operaciones en distintos formatos.

Dado que el módulo de análisis de sonidos se basa en la transformada de Fourier,
era necesario encontrar una biblioteca que pudiera realizar el cálculo de forma
rápida y precisa. KissFFT resultó ser una candidata ideal para esta tarea.

\subsection{PugiXML}
\textbf{PugiXML}~\cite{pugixml} es una ligera biblioteca para el parseo y
procesamiento de ficheros XML. Tiene soporte completo Unicode, un parseador muy
veloz y capacidad para usar consultas XPath. Además, su implementación apenas
ocupa cuatro ficheros de trivial compilación, por lo que resulta muy sencillo
incluirla en cualquier proyecto.

Esta biblioteca se utilizó para el procesamiento de los ficheros de canciones y
lecciones, que utilizan XML para representar los distintos elementos.

\subsection{Boost}
\textbf{Boost}~\cite{boost} es un conjunto de bibliotecas para C++ para un gran
cantidad de situaciones distintas. Entre sus componentes se incluyen bibliotecas
para el procesamiento de textos, herramientas de gestión de memoria, expresiones
regulares, parseo de opciones de línea de comandos, adaptadores para
programación funcional y un largo etcétera.

Entre sus desarrolladores se encuentran muchos de los mejores programadores de
C++, y tal es su calidad y popularidad, que 10 de las bibliotecas que componen
Boost formarán parte del nuevo estándar de C++.

En oFlute se han utilizado bastantes partes de Boost: punteros inteligentes,
soporte para expresiones regulares, acceso al sistema de ficheros, y operaciones
con cadenas. Esto ha simplificado mucho el código, consiguiendo un estilo más
limpio y elegante, sin sacrificar funcionalidad alguna.

\section{Gestión de código}

\subsection{Subversion}
\textbf{Subversion}~\cite{refsubversion}, popularmente conocido como
\textbf{SVN}, es un sistema de control de versiones muy popular y
utilizado. Hasta hace unos años era el indiscutible ganador entre los sistemas
de control de versiones de código, y en la actualidad sigue siendo la opción
principal en muchas de las forjas de código más importantes de internet.

Se basa en un repositorio central, al que se envían los cambios de
los ficheros versionados. Además, a diferencia de otros sistemas como CVS, lleva
un control de revisiones a nivel global, no a nivel de fichero.

Subversion ha servido, en oFlute, sobre todo como backup online, además de
historial de cambios. En más de una ocasión ha sido necesario revertir los
cambios, y Subversion ha facilitado mucho el proceso, que en otras
circunstancias podría no haber sido posible.

\subsection{Forjas: RedIris y Google Code}
Para llevar un control del código del proyecto y servir como punto de encuentro
con otros usuarios y desarrolladores se abrió una forja para oFlute,
inicialmente dentro de la \textbf{Forja de Conocimiento Libre de la Comunidad
  RedIRIS}\footnote{\url{http://forja.rediris.es}}, gestionada por la Junta de
Andalucía. Esta forja ofrecía, además de un sistema de control de versiones del
código, una serie de herramientas para la gestión de bugs, emisión de noticias,
listas de correos, etcétera.

Desafortunadamente la forja de RedIris carecía de un mantenimiento adecuado, lo
que llevó al traspaso del proyecto a \textbf{Google Code}~\cite{ofluteforja}, un
repositorio de código ofrecido por Google mucho más actualizado y con un
mantenimiento adecuado. Una de los atractivos de Google Code es su sistema de
páginas wiki, que permite gestionar documentación online utilizando una sintaxis
sencilla y potente.

\subsection{Doxygen}
\textbf{Doxygen}~\cite{doxygen} es una herramienta de generación automática de
documentación de código fuente. Basándose en unos comentarios con una sintaxis
especial, Doxygen genera documentación en un gran número de formatos: HTML, PDF,
RTF, \LaTeX...

Esta herramienta se utilizó para generar toda la documentación del código del
proyecto en formato \ac{HTML}.


\section{Herramientas de diseño y diagramas}

\subsection{Adobe Photoshop}
\textbf{Adobe Photoshop}~\cite{photoshop} es la herramienta de edición gráfica de mapa de bits
más popular y utilizada en el mundo. Su longeva historia y profuso desarrollo ha
hecho que se convierta en la herramienta estándar a la hora de trabajar con
imágenes no vectoriales.

Aunque no se trata de una herramienta libre, se utilizó esta aplicación para la
creación de todo el apartado visual de oFlute. Todas las secciones fueron
diseñadas con esta herramienta, obteniendo un apartado gráfico atractivo y
minimalista.

\subsection{Inkscape}
\textbf{Inkscape}~\cite{inkscape} es una herramienta libre de edición de gráficos vectoriales. A
diferencia de Adobe Photoshop, Inkscape trabaja con formas definidas
matemáticamente, que es posible escalar y distorsionar sin causar pérdida de
datos. Esto hace que sea la herramienta perfecta para trabajar con logotipos y
diagramas.

Esta aplicación ayudó al diseño del logotipo oficial de oFlute, así como al
ajuste de ciertos diagramas pertenecientes a la documentación.

\subsection{Dia}
\textbf{Dia}~\cite{dia} es un editor de diagramas libre, parte de la suite ofimática de
GNOME. Tiene un diseño modular que le permite abordar una gran variedad de
diagramas distintos, desde diagramas de flujo hasta modelos entidad-relación,
UML, etcétera.

Este software se empleó para la generación de la mayor parte de los diagramas
presentes en esta memoria.

\subsection{BoUML}

\textbf{BOUML}~\cite{bouml} es una herramienta libre para diseñar diagramas siguiendo la
notación UML. Cuenta con utilidades de generación automática de código a partir
de diagramas en lenguajes C++, Java, PHP, Python e IDL. Es multiplataforma y
permite la generación de varios tipos de diagramas: diagramas de clases, de
interacción, de secuencia, de casos de uso, etc

\subsection{ImageMagick}

\textbf{ImageMagick}~\cite{imagemagick} es un conjunto de utilidades de línea de comandos para
mostrar, editar y convertir ficheros de imagen. Resultan especialmente útil a la
hora de procesar un gran número de imágenes de forma automática, como por
ejemplo cuando es necesario convertir varias imágenes de un formato a otro, o
cambiar el tamaño de numerosos ficheros.

\section{Edición de textos}

\subsection{GNU Emacs}
\textbf{GNU Emacs}~\cite{refemacs} es un potente editor multiplataforma. Su propio manual lo
describe como \textit{``un editor extensible, personalizable, auto-documentado y
  de tiempo real''}. Emacs es tan potente que a menudo los usuarios
experimentados no tienen que salir de su interfaz para realizar cualquier
operación, ya que desde el propio editor se puede, desde navegar por la red,
hasta revisar el correo electrónico.

Emacs ha sido el editor utilizado para escribir todo el código fuente del
proyecto, así como toda la documentación en \LaTeX. Sus diversos \textit{modos}
se ajustan a cada tipo de documento, proporcionando funciones que faciliten y
aceleren la edición de los textos.

\subsection{\LaTeX}
\textbf{\LaTeX}~\cite{latex} es un sistema de composición de textos, orientado especialmente
a la creación de libros, documentos científicos y técnicos que contengan
fórmulas matemáticas. Es muy utilizado para la composición de artículos
académicos, tesis y libros técnicos, dado que la calidad tipográfica de los
documentos realizados con LaTeX es comparable a la de una editorial científica
de primera línea.

La presente memoria ha sido escrita y maquetada con \LaTeX.

%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "../memoria"
%%% End: 
